第一章
1.1EditPlus3 的安装 文本编辑器
*工具 首选项 保存备份文件 bak【可取消备份文件功能】
*修改字体大小
1.2DOS 命令
打开 dos 命令窗口:【windows+r 输入 cmd】
DOS窗口内内容复制:标记
exit:退出当前DOS命令窗口
cls:清屏
dir:列出当前目录下所有子文件
cd:[change directory 改变目录]
cd 目录路径
绝对路径:从某个磁盘盘符下作为出发点的路径
相对路径:从当前所在路径下作为出发点的路径
**cd ..**:回到上级目录
**cd **:直接回到根目录
del 文件路径:删除文件
切换盘符:盘符+:+回车
c:+回车
f:+回车
1.3计算机语言发展史
第一代语言:机器语言:二进制码01000100,以打孔机为代表的
第二代语言:低级语言:汇编语言,引入了英语单词代替枯燥的01
第三代语言:高级语言:c,c++,java…
java语言发展史:
诞生于1995
在1995一千SUN公司(太阳微电子公司:目前已经被Oracle(甲骨文,做数据库)收购)为占领电子消费产品市场,派James Gosling领导团队开发了Oak(橡树)语言
1996:JDK1.0诞生
JDK? java开发工具包,需要从官网下载:http://www.oracle.comJDK目前最高版本:Java8/JDK1.8/JDK8
java目前包括三大块:
javaSE(标准版)
javaEE(企业版)
javaME(微型版)
java语言特性:【开源,免费,纯面向对象,跨平台】
简单性:
不再支持多继承,c++支持多继承,多继承比较复杂,比如c++指针,java屏蔽了指针的概念,java语言底层是用c++实现的面向对象:
纯面向对象,更符合人的思维方式,更容易理解可移植性:
可以做到一次编译,到处运行,在各种系统上不做修改直接跨平台运行
原因:SUN团队把java运行在java虚拟机中,简称JVM,再由该虚拟机与操作系统打交道
多线程:
健壮性:
和自动垃圾回收机制有关,简称GC机制,java语言运行过程中产生的垃圾是自动回收的,不需要程序员关心安全性
等
1.4java的加载与执行
运行包括【编译】【运行】两个阶段
源文件.java->编译->字节码文件.class->
用JDK中自带的javac.exe命令进行java程序编译
编译阶段:
javac是一个java编译器工具/命令
javac在 DOS命令窗口中使用
使用规则:javac java源文件的路径
用法:javac HelloWorld.java
生成的class文件就是最终执行的文件,可以拷贝跨平台
运行阶段:
JDK安装后另一工具/命令java.exe负责运行
使用规则:java 类名
例如:硬盘上有一 a.class,用法:java a
java.exe命令会启动JVM,JVM启动类加载器ClassLoader在硬盘搜索class文件,解释成二进制码,操作系统执行二进制码与底层硬件平台交互
JDK:java开发工具包
JRE:java运行环境,包含JVM
JVM:java虚拟机
编译运行HelloWorld文件
1 | public class HelloWorld{//公开类,命名为HelloWorld |
用【javac HelloWorld.java】 进行编译
用【cd】命令把目录切换到class文件所在位置
用【java HelloWorld】 进行运行
解决javac不可用的问题:
java -version 可以查看当前版本
windows搜索硬盘上命令:
* 先从当前目录搜索
* 搜索不到时会去环境变量path指定路径搜索
把javac的路径配置到环境变量path中即可
javadoc注释:
/**
*javadoc注释
*javadoc注释
*javadoc注释
*/
该注释比较专业,会被javadoc.exe工具生成帮助文档
注释:
单行注释://
多行注释:/*
注释内容
*/
public class和class的区别:
- 一个java源文件中可以定义多个class
- public class不是必须的
- 一个class会定义生成一个.class文件
- 源文件中只能有一个public class,且类名需与源文件名称一致
- 每个class中都可以编写main方法,设定程序入口,想执行B.class中的main方法:java B
- 在命令窗口中执行java A,要求A.class中有main方法,否则错误
- 在文件夹路径栏输cmd回车可以快速定位到该路径
总结内容:
- 自己搭建java开发环境
- 理解java加载与执行
- 编写编译运行HelloWorld程序
- 掌握环境变量path原理及配置方法
- 掌握环境变量classpath方法及配置
- java注释
- public class和class的区别
1 |
第二章
标识符
1.命名规则:
字母,数字,下划线,美元符号$组成,不能数字开头,严格区分大小写,关键字不能做标识符
2.命名规范:
/* 见名知意
/* 驼峰命名方式:SystemService,UserService
/* 类名,接口名:首字母大写,后面每个单词首字母大写
/* 变量名,方法名:首字母小写,后面每个单词首字母大写
/* 变量名:全部大写
1 | public class HelloWorld{//类名HelloWorld |
字面值(等同于C语言 常量)
字面值:
10,100 整数型
3.14 浮点型
“abc”,”你好” 字符串型
‘a’ ,’人’ 字符型
true,false 布尔型
字面值就是数据
是java源程序组成部分之一
1 | public class Print{ |
变量
关于java中的变量:
什么是变量:
变量本质上是内存中的一块空间,该空间有数据类型,名字,字面值三个属性
变量包含这三个部分,是内存中存储数据的最基本的单元
数据类型的作用:
不同数据有不同类型,会被底层分配不同大小的空间
变量要求:
变量中存储的具体数据必须和数据类型一致,否则编译报错
声明/定义变量的语法格式:
数据类型 变量名;
例如:int i;
变量声明后赋值:
变量名 = 字面值;
声明和赋值可以放在一起完成
int i = 2;
变量赋值后可以重新赋值,变量的值可变:
int i = 10;
System.out.println(i);//10
i = 20;
System.out.println(i);//20
变量可以使内存空间得到重复利用
访问一个变量有两种形式:
1.读取变量中保存的具体数据 get/获取
2.修改变量中保存的具体数据 set/设置
i = 20; //set
System.out.println(i); //get
一行中可以声明多个变量
int a,b,c;
变量需要先声明,再赋值,再访问
在赋值后内存空间才被开辟
**同一个作用域中变量不能重名
变量的作用域:
变量的有效范围,在范围内可以被访问
1 | public class Test01{ |
1 | public class Test01{ |
关于变量分类:
遵循就近原则
根据变量声明位置分类:
局部变量:在方法体当中声明的
成员变量:在方法体外,类体内声明的
不同作用域中变量名可以相同
数据类型
数据类型的作用
指导JVM在运行程序过程中给数据分配相应大小的内存空间
基本数据类型
四大类八小种
第一类:整数型
整数型字面值默认当成int,想当成long处理需要在字面值后加 l/L
整数型三种表示方法:十进制【默认】,八进制【以0开始】,十六进制【以0x开头】
1 | public class DataTypeTest04{ |
byte
short
int
long
给long赋值需要注意:
字面值默认当做int处理,需要类型转换
int到long是小容量转大容量,可以自动转换
long x = 456;
long到int是大容量转小容量,不能自动转换
long y = 2147483647;//没有超出int的范围,可以自动转换
long y = 2147483648;//超出int范围,该数据会被当成int处理,截取4四节后赋值给long,产生错误
解决方法:long y = 2147483648L;
1 | public class DataTypeTest05{ |
强制转换原理及赋值原理:
直接砍去
例如:
原始数据:
00000000 00000000 00000000 00000000
10000000 00000000 00000000 00000000
转换后:
10000000 00000000 00000000 00000000(补码)
补码再转换成原码会发现精度损失严重,出现负数
分析下列程序是否可以编译通过:
byte b = 50;//可以
byte b = 127;//可以
byte b = 128;//不可以,超出范围了
byte b = (byte)128;//-128
分析:
依据目前所学知识应当无法编译通过,理由:50是int类型字面值,b是byte,大容量int转换成小容量byte需要强制类型转换符,所以应当编译报错;
但实际上没有报错,原因:java中,当一个整数字面值没超过byte, short, char的取值范围,可以直接赋值
第二类:浮点型
java语言中所有浮点型字面值,默认当做double类型
要想当float处理需要在字面值后面添加F/f
float
double
1 | public class DataTypeTest06{ |
关于浮点型数据类型
float 单精度【4个字节】
double 双精度【8个字节】
double精度太低【相对来说】,不适合做财务软件
所以SUN在基础SE类库当中准备了更高精确度的类型,是一种引用数据类型,不属于基本数据类型 java.math.BigDecimal
SUN提供了一套庞大的类库
SE类库字节码:java16.0.1不在图中所指地址,真实地址暂未找到
SE类库源码:java16.0.1不在图中所指地址,真实地址暂未找到
第三类:布尔型
boolean
第四类:字符型
char
基本数据类型 占用空间大小(字节) 取值范围 默认值
byte 1 [-128~127] 0
short 2 [-32768~32767] 0
int 4 [-2147486348~2147483647] 0
long 8 0
float 4 0.0
double 8 0.0
boolean 1 [ture,false] false
char 2 [0~65535] \u0000
short和char表示种类总数一样,但是char可以表示更大正整数,因为char没有负数
字节(byte)
1 Byte = 8 bit【1字节=8比特位】1个比特位代表一个二进制位
1 KB = 1024 Byte
1 MB = 1024 KB
1 GB = 1024 MB
1 TB = 1024 GB
**字符串”abc”属于引用数据类型
引用数据类型
类,接口,数组…
取值范围[-128~127]
可以表示256个不同数字(256个不同二进制)
八种基本类型当中,byte,short,int,long,float,double,boolean其中数据类型在计算机表示过程中比较容易,因为底层都是数字,十进制数字和二进制之间存在一种固定的转换规则
但是char是现实中文字,文字和计算机二进制之间默认情况下是不存在转换关系的
因此需要提前制定好对照关系,即 字符编码
计算机最初只支持英文,最先出现的的是ASCII码,解码和编码采用同一套字典/对照表,不会出现乱码
随着计算机发展,出现了另一种编码方式,国际化标准组织ISO制定的,支持西欧语言,向上兼容ASCII码,仍然不支持中文,ISO-8859-1(latin-1)
随着计算机向亚洲发展,计算机开始支持中文,日文,韩文等国家文字,其中支持简体中文的编码方式:GB2312<GBK<GB18030
后来出现了一种编码方式统一了全球所有的文字,容量较大,Unicode编码
Unicode编码有多种具体的实现:
UTF-8,UTF-16,UTF-32
java语言采用的是unicode编码,所以标识符可以用中文**
成员变量没有手动赋值时,系统会赋默认值
1 | public class DataTypeTest02{ |
1 | public class DataTypeTest01{ |
java转义字符 \
1 | public class DataTypeTest03{ |
System.out.println() 和System.out.print()区别:
System.out.println() 输出后自动换行
**System.out.print()**只输出不换行
JDK中自带的native2ascii.exe命令可以把文字转换成unicode编码形式,\u代表十六进制
未整理:
在java中boolean只有两个值:true和false(c语言可以用0和1)
但是实际存储只占用一个字节,因为在底层实际存储的是0和1
在实际开发中非常重要,经常使用在逻辑运算和条件控制语句中
基本数据类型之间相互转换:转换规则
1.除boolean之外剩余七种可以相互转换
2.小容量向大容量转换,自动转换,容量从小到大排序:
byte<short<int<long<float<double
<char<
注:
任何浮点型不管占用字节多大,都比整数型容量大
char和shour可表示的种类数量相同,但是char可以取更大的正整数
3.大容量转小容量,强制类型转换,需要加强制类型转换符,但是会损失精度
4.当字面值没有超出byte,short,char取值范围时,可以直接赋值
5.byte,short,char混合运算的时候,各自先转换成int类型再做运算
6.多种数据类型混合运算时,先转换成容量最大的类型再做运算
注意:
byte b = 3; //可以编译通过,3没有超出byte取值范围
但是
int i = 10;
byte b = i/3; //编译报错,编译器只检查语法,不会运算i/3,只能检查出类型错误,报错
运算符:
算术运算符
关系运算符
逻辑运算符
报错
错误: 编码 GBK 的不可映射字符 (0x96)
将javac命令改成:javac -encoding UTF-8 地址